package com.ebelter.scaleblesdk.ble.bluetooth;

import com.ebelter.scaleblesdk.ble.bluetooth.device.WeightDataHandle;
import com.ebelter.scaleblesdk.ble.model.AlarmClock;
import com.ebelter.scaleblesdk.ble.model.FatResult;
import com.ebelter.scaleblesdk.model.Weight;

/**
 * 体脂称蓝牙消息回调类
 * @author fenghui
 *
 */
public interface IWeightMessageCallBack extends IBlueToothMessageCallBack {

	/* 版本类型相关  */
	public static final int VERSIONTYPE_BLEOTA = 0;
	public static final int VERSIONTYPE_SCALEOTA = 1;
	public static final int VERSIONTYPE_COEFFICIENTOTA = 2;
	public static final int VERSIONTYPE_ARITHMETICOTA = 3;


	/**
	 * 秤被唤醒
	 */
	void onScaleWake();

	/**
	 * 秤已休眠
	 */
	void onScaleSleep();
	
	/**
	 * 单位设置之后
	 */
	void onUnitSet(WeightDataHandle.WeightUnit unit);
	
	/**
	 * 获取到第n组闹钟
	 */
	void onGotAlarm(AlarmClock clock);

	/**
	 * 获取到秤版本信息
	 * @param bleVer bel固件版本
	 * @param scaleVer 秤固件版本
	 * @param coefficientVer 系数固件版本
	 * @param arithmeticVer 算法固件版本
	 */
	void onGotScaleVersion(int bleVer, int scaleVer, int coefficientVer, int arithmeticVer);

	/**
	 * 获取到秤当前系统时间
	 * @param year
	 * @param month
	 * @param date
	 * @param hour
	 * @param minute
	 * @param second
	 * @param weekOfYear
	 */
	void onGotScaleClock(int year, int month, int date, int hour, int minute, int second, int weekOfYear);

	/**
	 * 脂肪测量结果数据
	 * @param fatResult
	 */
	void onFatMeasureResult(FatResult fatResult);

	/**
	 * 体重测量信息
	 * @param weight
	 */
	void onWeightMeasureResult(Weight weight);
	
	
	/**
	 * 体重超载
	 */
	void onWeightOverLoad();

	/**
	 * 接收到测量历史数据
	 * @param fatResult
	 */
	void onReceiveHistoryRecord(FatResult fatResult);

	/**
	 * 升级包应答
	 * @param pkgNo 第几个升级包
	 */
	void onUpgradeResponse(int pkgNo, boolean result);
	
	/**
	 * 升级结果
	 * @param result
	 */
	void onUpgradeResult(int result, int type);
	
	/**
	 * 低电提示
	 */
	void onLowPower();

	/**
	 * 测脂出错
	 * @param type 出错类型
	 */
	void onFatMeasureError(int type);

	/**
	 * 接收到设置闹钟消息返回ACK
	 */
	void onSetClockAck();

	/**
	 * 接收到OTA升级准备就绪命令
	 */
	void onOtaUpgradeReady(boolean result);
	
	/**
	 * 接收到历史记录上发完毕
	 */
	void onHistoryUploadDone();

	/**
	 * 秤响应App列表更新指令
	 */
	void onListUpdate();

	/**
	 * SDK授权结果
	 * @param bytes
	 */
	void onSDKAuthResult(byte[] bytes);
	
	/**
	 * 接收到认证失败消息
	 * 2017-08-27新增
	 */
	void onAuthFailed();
	
	/**
	 * 接收到认证成功消息
	 * 2017-08-27新增
	 */
	void onAuthSuccess();
	
	/**
	 * 用户绑定成功消息
	 * 2017-08-27新增
	 */
	void onBindSuccess();
		
	
	/**
	 * 未上传测量记录为空的时候
	 */
	void onGotLastRecordEmpty();

	
	/**
	 * 接收到SHA256第一包
	 * 2017-08-29新增
	 */
	void onReceiveSha256PkgOne();
	
	/**
	 * 接收到SHA256第二包
	 * 2017-08-29新增
	 */
	void onReceiveSha256PkgTwo();
	
	/**
	 * 删除绑定用户列表ACK
	 */
	void onClearBindUser();

	/**
	 * 蓝牙已关闭
	 */
	void onBluetoothClosed();

	/**
	 * 蓝牙已打开
	 */
	void onBluetoothOpened();

	/**
	 * 获取到蓝牙固件后
	 * @param bleVer
     */
	void onBleVersionGot(int bleVer);
}